// API 配置管理
class ApiConfig {
  constructor() {
    this.configFile = 'config.json';
    this.baseURL = this.getBaseURLSync(); // 使用同步方法初始化
    this.initialized = false;
    this.init();
  }

  // 异步初始化
  async init() {
    try {
      this.baseURL = await this.getBaseURL();
      this.initialized = true;
    } catch (error) {
      console.warn('配置初始化失败，使用默认值:', error);
      this.baseURL = 'http://127.0.0.1:3000';
      this.initialized = true;
    }
  }

  // 从配置文件获取基础 URL，如果没有则使用默认值
  async getBaseURL() {
    try {
      // 尝试从localStorage获取，如果没有则从配置文件读取
      const storedURL = localStorage.getItem('apiBaseURL');
      if (storedURL) {
        return storedURL;
      }
      
      // 从配置文件读取
      const config = await this.loadConfig();
      return config.baseURL || 'http://127.0.0.1:3000';
    } catch (error) {
      console.warn('无法读取配置文件，使用默认值:', error);
      return 'http://127.0.0.1:3000';
    }
  }

  // 同步获取基础URL（用于向后兼容）
  getBaseURLSync() {
    const storedURL = localStorage.getItem('apiBaseURL');
    if (storedURL) {
      return storedURL;
    }
    return 'http://127.0.0.1:3000';
  }

  // 加载配置文件
  async loadConfig() {
    try {
      // 从public目录加载配置文件
      const response = await fetch('/config.json');
      if (!response.ok) {
        throw new Error(`HTTP error! status: ${response.status}`);
      }
      const config = await response.json();
      return config;
    } catch (error) {
      console.error('加载配置文件失败:', error);
      return {
        baseURL: 'http://127.0.0.1:3000'
      };
    }
  }

  // 保存配置到文件
  async saveConfig(config) {
    try {
      // 通过API调用保存配置文件
      const response = await fetch('/api/config', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
        },
        body: JSON.stringify(config)
      });
      
      if (!response.ok) {
        throw new Error(`保存配置失败: ${response.status}`);
      }
      
      console.log('配置保存成功:', config);
      return true;
    } catch (error) {
      console.error('保存配置文件失败:', error);
      return false;
    }
  }

  // 设置基础 URL
  async setBaseURL(url) {
    this.baseURL = url;
    localStorage.setItem('apiBaseURL', url);
    
    // 同时保存到配置文件
    const config = await this.loadConfig();
    config.baseURL = url;
    await this.saveConfig(config);
  }

  // 获取完整的 API URL
  getApiURL(path) {
    return `${this.baseURL}${path}`;
  }

  // 重置为默认 URL
  async resetToDefault() {
    const defaultURL = 'http://127.0.0.1:3000';
    await this.setBaseURL(defaultURL);
  }

  // 获取当前存储的配置
  async getStoredConfig() {
    return {
      baseURL: localStorage.getItem('apiBaseURL') || (await this.loadConfig()).baseURL,
      hasStoredConfig: localStorage.getItem('apiBaseURL') !== null
    };
  }

  // 清除存储的配置
  async clearStoredConfig() {
    localStorage.removeItem('apiBaseURL');
    this.baseURL = 'http://127.0.0.1:3000';
    
    // 重置配置文件
    const config = await this.loadConfig();
    config.baseURL = 'http://127.0.0.1:3000';
    await this.saveConfig(config);
  }
}

// 创建全局实例
const apiConfig = new ApiConfig();

export default apiConfig; 